/**
 * @author 梅峰
 * @class SysManger.Property
 * 参数维护业务所需的基础js代码.
 * 
 * Dependence: 
 * 		javascript/SysManager.js
 * 		javascript/SysManager.Properties.js
 * 
 */
SysManager.Property = function(){
	
	var propertyGrid;
	var cb = new Ext.grid.CheckboxSelectionModel();
	var propertyGridStore;
	
	/**
	 * 初始化propertyGrid.
	 * @param 分页步长.
	 */
	function initPropertyGrid(pageLimit){
		initPropertyGridStore();
		propertyGrid = new Ext.grid.GridPanel({
	    	//el : 'property-grid-div',
	    	//title : '参数维护',
	    	width:Ext.get("content").getWidth(),
	    	height:Ext.get("content").getHeight()/2,
	    	viewConfig:{forceFit:true},//自动填充列宽.
	    	store : propertyGridStore,
	    	cm : new Ext.grid.ColumnModel({
	    	defaultSortable : true,
	    	columns : [
					cb,
					new Ext.grid.RowNumberer({header:'行号',width:40}),
			        {header: '代码', dataIndex: 'code', width: 100},
			        {header: '英文名称', dataIndex: 'englishName', width: 100},   
			        {header: '中文名称', dataIndex: 'chineseName', width: 100},
			        {header: '所属类型', dataIndex: 'type',width : 100}
		    	]
		    }),
	    	trackMouseOver : false,
	    	sm : cb,
	    	tbar : new Ext.Toolbar([
		    	{text:'新增参数类型',icon:'icons/toolBar/add.gif',handler:showAddProperty}, '-',
		    	{text:'修改类型信息',icon:'icons/toolBar/plugin.gif',handler:showModifyProperty}, '-',
		    	{text:'删除参数类型',icon:'icons/toolBar/delete.gif',handler:showDeleteProperty}
		    ]),
	    	bbar: new Ext.PagingToolbar({
		            pageSize: pageLimit,
		            store: propertyGridStore,
		            displayInfo: true,
		            displayMsg: '显示第 {0} 条到 {1} 条记录，一共 {2} 条',
		            emptyMsg: "没有记录"
		        }),
		    listeners : {"rowdblclick" : rowdblclick}
	    });
	}; 
	
	//初始化数据源.
	function initPropertyGridStore(){
		propertyGridStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
				url : 'property.action?method=page',
				method:'GET'
			}),
			reader : new Ext.data.JsonReader({
				id : 'id',
				root : 'data',
				totalProperty : 'totalProperty',
				fields : [
					{name : 'id', mapping : 'id'},
					{name : 'englishName', mapping : 'englishName'},
					{name : 'chineseName', mapping : 'chineseName'},
					{name : 'code', mapping : 'code'},
					{name : 'type', mapping : 'type'}
				]
			})
		});
	};
	
    //添加<参数类型>handler.
    function showAddProperty(){
    	SysManager.Property.Form.showForm();
    };
    
    //修改<参数类型>handler.
    function showModifyProperty(){
    	var idList = getSelectedProperty();
    	var num = idList.length;
    	if(num > 1){
		    Ext.MessageBox.alert('提示','只能同时修改一条信息!');
    	}else if(num == 1){
    		SysManager.Property.Form.showForm(idList[0]);
    	}
    };
    
    //删除<参数类型>handler.
    function showDeleteProperty(){
    	var idList = getSelectedProperty();
    	Ext.MessageBox.confirm('提示','您确定要删除选定的参数类型吗?',
    		function(btnId){
    			if(btnId == 'yes'){
    				deleteProperty(idList);
    			}
    		}
    	);
    };
    
    
    function deleteProperty(propertyId){
    	
    	 var msgTip = Ext.MessageBox.show({
           msg: '正在删除所选项目, 稍后...',
           progressText: '删除...',
           width:300,
           wait:true,
           waitConfig: {interval:200}
       });
    	
    	Ext.Ajax.request({
    		url : 'property.action?method=delete',
    		params : {'ids':propertyId},
    		method : 'POST',
    		success : function(response, options){
    			msgTip.hide();
    			var result = Ext.util.JSON.decode(response.responseText);
    			if(result.success){
    				for(var i=0; i < propertyId.length; i++){
	    				var index = propertyGridStore.find('id',propertyId[i]);
		    			if(index != -1){
		    				var rec = propertyGridStore.getAt(index);
		    				propertyGridStore.remove(rec);
		    			}
	    			}
    				Ext.Msg.alert('提示','成功删除项目');
    			}else{
    				Ext.Msg.alert('提示','该参数类别不能删除，因为含有子项.');
    			}
    		},
    		failure : function(response, options){
    			msgTip.hide();
    			Ext.Msg.alert('提示','删除失败.');
    		}
    	});
    };
    
    
    /**
     * 双击行，回调函数.
     */
    function rowdblclick(grid, rowIndex, columnIndex, e) {
	    var record = grid.getStore().getAt(rowIndex);
	    var data = record.get("id");
	    var name = record.get("chineseName");
	    var code = record.get("code");
	    var enName = record.get("englishName");
	    if(SysManager.Properties){
	    	SysManager.Properties.showProperties(data, name, code, enName);
	    }
	};
	
	
	/**
	 * 得到选定行id.
	 */
	function getSelectedProperty(){
		var idList = [];
		if(propertyGrid){
			var propertyList = propertyGrid.getSelectionModel().getSelections();
	    	if(propertyList.length == 0){
	    		Ext.MessageBox.alert('提示','请选择要操作的参数类型!')
	    	}else{
	    		for(var i=0; i<propertyList.length; i++){
	    			idList.push(propertyList[i].get('id'));
	    		}
	    	}
		}
    	return idList;
    };
    
	
	return {
		/**
		 * 初始化.
		 * @param divName 显示grid的{Element/HTMLElement/String}.
		 * @param pageLimit 步长.
		 */
		initialize : function(divName, pageLimit){
		    initPropertyGrid(pageLimit);
		    propertyGridStore.load({params:{start:0,limit:pageLimit}});
			propertyGrid.render(divName);
		},
		
		/**
		 * 刷新数据源.
		 */
		reload : function(){
			propertyGridStore.reload();
		}
	};
	
}();
